package com.evan.idempotent.storage;

import com.evan.idempotent.enums.IdempotentStorageTypeEnum;

import java.util.concurrent.TimeUnit;

/**
 * @Description: 幂等存储接口
 * @Author liudeguang
 */
public interface IdempotentStorage {

    /**
     * 幂等存储数类型
     *
     * @return
     */
    IdempotentStorageTypeEnum type();

    /**
     * 存储幂等KEY
     *
     * @param key
     * @param value
     * @param expireTime
     * @param timeUnit
     */
    void setValue(String key, String value, long expireTime, TimeUnit timeUnit);

    /**
     * 获取幂等KEY
     *
     * @param key
     * @return
     */
    String getValue(String key);

    /**
     * 天然支持分布式（高并发）的一步验证操作
     *
     * @param key
     * @param expireTime
     * @param timeUnit
     * @return
     */
    Boolean verify(String key, long expireTime, TimeUnit timeUnit);
}
